/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package otcapp.controlador.seguridadDecoradores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import otcapp.controlador.ControladorPrincipal;
import otcapp.controlador.jinternalFrame.IniciarSesionPantalla;
import otcapp.seguridad.Perfil;
import otcapp.seguridad.Usuario;
import persistencia.Fachada;

/**
 *
 * @author diego
 */
public class ControladorPrincipalSeguridad extends ControladorPrincipal {

    private static ControladorPrincipalSeguridad instancia;
    private IniciarSesionPantalla pantallaInicioSesion;
    private Usuario usuario;

    public static ControladorPrincipalSeguridad getInstancia() {
        if (instancia == null) {
            instancia = new ControladorPrincipalSeguridad();
        }
        return instancia;
    }

    public ControladorPrincipalSeguridad() {
        super();
        pantallaInicioSesion = new IniciarSesionPantalla();

        pantallaInicioSesion.getBtnIniciarSesion().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                iniciarSesion();
            }
        });
        pantallaInicioSesion.getTxtPass().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                iniciarSesion();
            }
        });
        pantallaInicioSesion.getBtnCancelar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                finalizar();
            }
        });
    }

    @Override
    public void iniciar() {
        super.iniciar();
        pantallaInicioSesion.setVisible(true);
        pantallaInicioSesion.toFront();
        super.agregarPantallaInterna(pantallaInicioSesion);
        
    }

    public Usuario getUsuario() {
        return usuario;
    }

    private void habilitarComponentes() {
        List<Perfil> perfiles = usuario.getPerfiles();
        for (Perfil perfil : perfiles) {
            switch (perfil.getNombrePerfil()) {
                case "Mesa de Entrada":
                    (super.getPantallaPrincipal()).ocultarBtnAsignarProfesional();
                    (super.getPantallaPrincipal()).ocultarBtnSupervisiones();
                    (super.getPantallaPrincipal()).ocultarBtnUsuarios();
                    break;
                case "Oficina Técina":
                    (super.getPantallaPrincipal()).ocultarBtnIngresarPieza();
                    (super.getPantallaPrincipal()).ocultarBtnSupervisiones();
                    (super.getPantallaPrincipal()).ocultarBtnUsuarios();
                    break;
                case "Control de Gestión":
                    (super.getPantallaPrincipal()).ocultarBtnIngresarPieza();
                    (super.getPantallaPrincipal()).ocultarBtnAsignarProfesional();
                    (super.getPantallaPrincipal()).ocultarBtnUsuarios();
                    break;
            }
        }



    }

    private void iniciarSesion() {
        String nombreUsuario = pantallaInicioSesion.getTxtUsuario().getText();
        String pass = pantallaInicioSesion.getTxtPass().getText();

        Criteria criterio = Fachada.getInstancia().crearCriterio(Usuario.class);
        criterio.add(Restrictions.eq("nombreUsuario", nombreUsuario)).add(Restrictions.eq("password", pass));

        try {
            usuario = (Usuario) Fachada.getInstancia().buscar(Usuario.class, criterio).get(0);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(pantallaInicioSesion, "Nombre de usuario o contraseña incorrectos", "INFORMACIÓN", JOptionPane.INFORMATION_MESSAGE);
            return;
        }
        habilitarComponentes();
        pantallaInicioSesion.setVisible(false);
    }
}
